package com.qaml.mes.device.repository.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qaml.mes.device.dao.EqpAttachmentDO;
import com.qaml.mes.device.dao.EqpInfoDO;
import com.qaml.mes.device.dao.mapper.EqpAttachmentMapper;
import com.qaml.mes.device.dao.mapper.EqpInfoMapper;
import com.qaml.mes.device.repository.EqpInfoRepository;
import com.qaml.mes.device.dto.eqp.EqpInfoIdDTO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;

/**
 * @ClassName EqpInfoRepositoryImpl
 * @Description TODO
 * @Author leikai
 * @Date 2024/2/27 0027 9:57
 * @Version 1.0
 */
@Repository
public class EqpInfoRepositoryImpl implements EqpInfoRepository {

    @Resource
    private EqpInfoMapper eqpInfoMapper;

    @Resource
    private EqpAttachmentMapper eqpAttachmentMapper;

    @Override
    public void save(EqpInfoDO eqpInfoDO) {
        eqpInfoMapper.insert(eqpInfoDO);
    }

    @Override
    public void update(EqpInfoDO eqpInfoDO) {
        eqpInfoMapper.updateById(eqpInfoDO);

    }

    /**
     * 删除设备信息
     *
     * @param id
     */
    @Override
    public void deleteById(String id) {
        eqpInfoMapper.deleteById(id);
    }

    /**
     * 根据id查询设备信息
     *
     * @param id
     */
    @Override
    public EqpInfoDO getById(String id) {
        LambdaQueryWrapper<EqpInfoDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EqpInfoDO::getId, id);
        queryWrapper.eq(EqpInfoDO::getIsDeleted, 0);
        return eqpInfoMapper.selectOne(queryWrapper);
    }

    /**
     * 分页列表查询设备信息
     *
     * @param page
     * @param pageSize
     * @param eqpInfoDO
     * @return
     */
    @Override
    public IPage<EqpInfoDO> page(Integer page, Integer pageSize, EqpInfoDO eqpInfoDO) {
        return eqpInfoMapper.selectPage(new Page<>(page, pageSize), buildQueryWrapper(eqpInfoDO));
    }

    @Override
    public EqpInfoDO getByStatus(EqpInfoIdDTO eqpInfoIdDTO, Integer status) {
        LambdaQueryWrapper<EqpInfoDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EqpInfoDO::getId, eqpInfoIdDTO.getId());
        queryWrapper.eq(EqpInfoDO::getStatus, status);
        queryWrapper.eq(EqpInfoDO::getIsDeleted, 0);
        return eqpInfoMapper.selectOne(queryWrapper);
    }

    /**
     * 设备列表     -->接口
     *
     * @return
     */
    @Override
    public List<EqpInfoDO> getEqpCodeList() {
        LambdaQueryWrapper<EqpInfoDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EqpInfoDO::getIsDeleted, 0);
        return eqpInfoMapper.selectList(queryWrapper);
    }

    @Override
    public List<EqpAttachmentDO> getAttachmentByEqpId(String eqpId, String type, Integer isShow) {

        LambdaQueryWrapper<EqpAttachmentDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EqpAttachmentDO::getEqpId, eqpId).eq(Objects.nonNull(type), EqpAttachmentDO::getAttachmentType, type)
                .eq(Objects.nonNull(isShow), EqpAttachmentDO::getIsShow, isShow);
        return eqpAttachmentMapper.selectList(queryWrapper);
    }

    /**
     * @param eqpInfoDO
     * @return
     */
    private LambdaQueryWrapper<EqpInfoDO> buildQueryWrapper(EqpInfoDO eqpInfoDO) {
        LambdaQueryWrapper<EqpInfoDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EqpInfoDO::getIsDeleted, 0);
        if (eqpInfoDO == null) {
            return queryWrapper;
        }
        /**
         * 设备名称模糊查询
         * 设备编号模糊查询
         * 规格型号模糊查询
         */
        queryWrapper.like(!StringUtils.isEmpty(eqpInfoDO.getEqpName()), EqpInfoDO::getEqpName, eqpInfoDO.getEqpName())
                .eq(!StringUtils.isEmpty(eqpInfoDO.getEqpCode()), EqpInfoDO::getEqpCode, eqpInfoDO.getEqpCode())
                .eq(!StringUtils.isEmpty(eqpInfoDO.getCraftTypeCode()), EqpInfoDO::getCraftTypeCode, eqpInfoDO.getCraftTypeCode())
                .like(!StringUtils.isEmpty(eqpInfoDO.getSpecModel()), EqpInfoDO::getSpecModel, eqpInfoDO.getSpecModel())
                .orderByDesc(EqpInfoDO::getId);
        return queryWrapper;
    }
}